package com.yidushishizijie;

import java.util.concurrent.*;

//模拟十个顾客来银行办理业务，目前池子里有五个工作人员提供服务
/*
* 这题使用的是银行模型来模拟线程池工作情况，
* jdk自带一个Executors工具类，内有三个自带的线程池模型
* 第一个：一池固定线程
* 第二个：一池一线程
* 第三个：一池N线程（自动扩容）
* 但是这三个不会使用,因为最大线程数不会符合现实情况的要求
*
* 一般使用自定义线程池；ThreadPoolExecutor
*
* */

public class ThreadPoolDemo {
    public static void main(String[] args) {
        ExecutorService threadPool = new ThreadPoolExecutor( 2,
                Runtime.getRuntime().availableProcessors()+1,
                3L,
                TimeUnit.SECONDS,
                new LinkedBlockingQueue<>(3),
                Executors.defaultThreadFactory(),
                new ThreadPoolExecutor.AbortPolicy()
                );

        try {
            for (int i = 1; i <=9 ; i++) {
                /*TimeUnit.SECONDS.sleep(1);*/
                threadPool.execute(() ->{
                    System.out.println(Thread.currentThread().getName()+"\t 办理业务");
                });
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            threadPool.shutdown();
        }
    }

}
